package yl.hs.bmipfull.daos.flow;

import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import yl.hs.bmipfull.daos.BaseDao;
import yl.hs.bmipfull.pojo.flow.FlowUserTaskEntity;

import java.util.List;
import java.util.Map;

/**
 * @author 张凯
 * @apiNote 流程任务信息持久层接口
 * @since 2021年07月08日 16时53分56秒
 */
@Repository
public interface IFlowUserTaskDao extends BaseDao<FlowUserTaskEntity> {


    /**
     * 根据处理人编号查询待办事项
     *
     * @param handlerUserSN 处理人编号
     * @return 待办事项
     */
    List<FlowUserTaskEntity> queryUserTaskByHandlerUserSN(String handlerUserSN);

    /**
     * 根据数据id修改状态
     * @param objectSN 新的实体实例
     * @return 受影响行数
     */
    Integer updateStateByObjectSN(String objectSN);

    /**
     * 分页查询流程任务信息信息
     *
     * @param map 查询条件 {@link FlowUserTaskEntity}
     * @return 站内信息-List<{@link FlowUserTaskEntity}>
     */
    List<FlowUserTaskEntity> queryPage(@Param("map") Map<String, Object> map);

    /**
     * 根据查询条件统计数据数量
     *
     * @param map 查询条件
     * @return 数据数量
     */
    Integer queryCountByCondition(@Param("map") Map<String, Object> map);

    /**
     * 根据流程任务信息编号更改流程任务信息信息状态
     *
     * @param snArray 流程任务信息编号
     * @param state   要改变的状态
     * @return 执行结果
     */
    Integer changeStateBySN(String[] snArray, short state);

    /**
     * 根据数据编号查询待办事项
     *
     * @param objectSN 数据编号
     * @return 待办事项
     */
    List<FlowUserTaskEntity> queryListByObjectSN(String objectSN);

    /**
     * 根据流程节点编号查询待办事项
     *
     * @param flowNodeSN 流程节点编号查
     * @return 待办事项
     */
    List<FlowUserTaskEntity> queryListByFlowNodeSN(String flowNodeSN);

    List<FlowUserTaskEntity> getUserTaskByObjectSN(String dataSN,String handlerUserSN);

    /**
     * 根据流程节点编号和数据编号查询待办事项
     * @param flowNodeSN 流程节点编号查
     * @param objectSN 数据编号
     * @return 待办事项
     */
    List<FlowUserTaskEntity> queryListByFlowNodeSNAndObjectSN(String flowNodeSN,String objectSN);
    /**
     * 查询全部代办事项
     * @param handlerUserSN 用户编号
     * @param taskState 事项类型
     * @return 待办事项
     */
    List<FlowUserTaskEntity> QueryAllByUserAction(String handlerUserSN,short taskState);
    Integer deleteByObjectSN(List<String> listobject);
}